namespace array_demo.Model
{
    // 栈 先进后出(弹夹式手枪)
    public class ArrayStack1<E> : IStack<E>
    {
        private Array1<E> array;

        public ArrayStack1(int capacity)
        {
            array = new Array1<E>(capacity);
        }

        public ArrayStack1()
        {
            array = new Array1<E>();
        }

        public int Count => array.Count;

        public bool IsEmpty => array.IsEmpty();


        /// <summary>
        /// 出栈（移除并返回在 Stack 的顶部的对象。）
        /// </summary>
        /// <returns></returns>
        public E Pop()
        {
            return array.DeleteLast();
        }

        /// <summary>
        /// 入栈（向 Stack 的顶部添加一个对象。）
        /// </summary>
        /// <param name="e"></param>
        public void Push(E e)
        {
            // 数组的尾部添加元素 O1 
            // 数组头部On作为头部时，添加元素，数组的元素需要往后移动一个位置是On的
            array.AddLast(e);
        }

        /// <summary>
        /// 查看（返回在 Stack 的顶部的对象，但不移除它）
        /// </summary>
        /// <returns></returns>
        public E Peek()
        {
            return array.GetLast();
        }

        public override string ToString()
        {
            return "stack" + array.ToString() + "top";
        }
    }
}